package com.jollychic.www.roomdatebasedemo.dao;

import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Delete;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.OnConflictStrategy;
import android.arch.persistence.room.Query;
import android.arch.persistence.room.Update;

import com.jollychic.www.roomdatebasedemo.model.StoreEntity;

import java.util.List;

import io.reactivex.Single;

/**
 * desc:  <br/>
 * author: 李超杰 <br/>
 * time: 2018/4/20 0020 20:40 <br/>
 * since: V 6.1X <br/>
 */
@Dao
public interface IStoreDao {

    /**
     * ***********************************************
     * 查询
     * 1.@Query也可以返回多种不同的类型。
     * 2.@Qurey 也可以传限定符
     * ****************************************˙********
     */

    /**
     * 直接获取所有店铺
     *
     * @return
     */
    @Query("SELECT * FROM stores")
    List<StoreEntity> getStoresList();

    /**
     * 获取所有数据
     *
     * @return
     */
    @Query("SELECT * FROM stores")
    Single<List<StoreEntity>> getRxStoresList();

    /**
     * 根据商品id去查询指定的
     *
     * @param storeId
     * @return
     */
    @Query("SELECT * FROM stores WHERE storeId=:storeId")
    StoreEntity getStoreByStoreId(String storeId);

    /**
     * 根据商品id去查询指定的
     *
     * @param storeId
     * @return
     */
    @Query("SELECT * FROM stores WHERE storeId=:storeId")
    Single<StoreEntity> getRxStoreByStoreId(String storeId);

    /**
     * 根据 id 列表去查询相应的List
     *
     * @param idList
     * @return
     */
    @Query("SELECT * FROM stores WHERE storeId IN (:idList)")
    List<StoreEntity> getStoreByStoreIds(List<String> idList);

    /**
     * 根据店铺名称去查询
     *
     * @param name
     * @return
     */
    @Query("SELECT * FROM stores WHERE storeName=:name")
    List<StoreEntity> getStoreListByName(String name);

    /**
     * 根据店铺名称去查询
     *
     * @param name
     * @return
     */
    @Query("SELECT * FROM stores WHERE storeName=:name")
    Single<List<StoreEntity>> getRxStoreListByName(String name);

    /**
     * 根据店铺名称并限制数据去查
     *
     * @param max  最多查询条数
     * @param name 店铺名称
     * @return
     */
    @Query("SELECT * FROM stores WHERE storeName=:name LIMIT :max")
    List<StoreEntity> getStoreListByName(int max, String... name);

    /**
     * 根据店铺名称并限制数据去查
     *
     * @param max  最多查询条数
     * @param name 店铺名称
     * @return
     */
    @Query("SELECT * FROM stores WHERE storeName=:name LIMIT :max")
    Single<List<StoreEntity>> getRxStoreListByName(int max, String... name);


    /**
     * ***********************************************
     * 插入
     * ************************************************
     */

    /**
     * 存入单个店铺
     *
     * @param storeEntity
     */
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insert(StoreEntity... storeEntity);

    @Insert
    void insert(List<StoreEntity> list);


    /**
     * ***********************************************
     * 更新
     * ************************************************
     */

    @Update
    void update(StoreEntity... storeEntity);


    /**
     * ***********************************************
     * 删除
     * ************************************************
     */

    @Delete
    void delete(StoreEntity... storeEntity);

    @Delete
    void delete(List<StoreEntity> storeEntityList);

}
